package com.syh.jn.scm.service.api.supplier.sale;

import cn.redscarf.commons.wrapper.Wrapper;
import com.syh.jn.scm.dto.supplier.sale.*;
import com.syh.jn.scm.dto.support.FilesDto;
import com.syh.jn.scm.service.core.BaseService;

import java.math.BigDecimal;
import java.util.List;

/**
 * Date:2018/7/16
 * Author:Clown
 * Desc;
 */
public interface SaleOrderService extends BaseService<SaleOrderSto, SaleOrderMto, SaleOrderVo, Long> {

    /**
     * 取消订单
     *
     * @param id
     */
    public void cancel(Long id);

    /**
     * 确认订单
     *
     * @param id
     */
    public void confirm(Long id);

    /**
     * 反确认订单
     *
     * @param id
     */
    public void antiConfirm(Long id);

    /**
     * 根据id获取订单明细
     *
     * @param id
     * @return
     */
    List<SaleOrderItemVo> getItemsBySaleOrderId(Long id);

    /**
     * 根据ids获取订单明细
     *
     * @param ids
     * @return
     */
    List<SaleOrderItemVo> getItemsBySaleOrderIds(Long[] ids);

    /**
     * 根据goodsId拿到订单明细对象
     *
     * @param goodsId
     * @return
     */
    SaleOrderItemVo getByGoodsId(Long goodsId, Long id);

    /**
     * 上传图片
     *
     * @param dto
     */
    public void upload(FilesDto dto);

    /**
     * 数据迁移导入
     *
     * @param stoList
     * @return
     */
    List<Long> batchSave(List<SaleOrderSto> stoList);

    /**
     * 销售统计金额
     *
     * @param wrapper
     * @return
     */
    SaleStatisticalAmountVo statisticalAmount(Wrapper wrapper);

    /**
     * 列表查询的销售订单总额
     * @param we
     * @return
     */
    SaleStatisticalAmountVo statisticalAmountByOrder(Wrapper we);

    /**
     * 根据客户统计销售订单金额
     *
     * @param we
     * @return
     */
    List<SaleStatisticalAmountVo> statisticalAmountByCustomer(Wrapper we);

    /**
     * 根据商品统计销售订单金额
     *
     * @param we
     * @return
     */
    List<SaleStatisticalAmountVo> statisticalAmountByGoods(Wrapper we);

    /**
     * 纠正订单物流相关字段数据
     */
    void correctingLogisticsData();
}
